package com.demo.java.OD501_550.OD511;

import java.util.Scanner;
import java.util.*;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【书籍叠放(B卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146479185
 */
public class OdMain {
    public static void main(String[] args) {
        // 处理输入
        Scanner in = new Scanner(System.in);
        String book_info = in.nextLine().replaceAll("\\[", "").replaceAll("\\]", "");  // 清理输入字符串
        String[] book_list = book_info.split(",");  // 以逗号分隔，获取每本书的长度和宽度
        int[][] books = new int[book_list.length / 2][2];  // 创建二维数组存储书的长度和宽度
        for (int i = 0; i < books.length; i++) {
            books[i][0] = Integer.parseInt(book_list[i * 2]);  // 长度
            books[i][1] = Integer.parseInt(book_list[i * 2 + 1]);  // 宽度
        }

        // 按长度升序排序，如果长度相同则按宽度降序排列
        Arrays.sort(books, (a, b) -> (a[0] == b[0] ? b[1] - a[1] : a[0] - b[0]));

        // 动态规划计算最多能够放置的书的数量
        int[] dp = new int[books.length];
        Arrays.fill(dp, 1);  // 初始化，每本书至少能放一个
        int res = 0;  // 最终结果，最多能放置的书的数量

        // 遍历每本书
        for (int i = 0; i < books.length; i++) {
            for (int j = 0; j < i; j++) {
                // 如果当前书的宽度大于前一书的宽度，更新最大放置数量
                if (books[i][1] > books[j][1]) {
                    dp[i] = Math.max(dp[i], dp[j] + 1);  // 比较当前的放置数和前面放置数加一的值
                }
            }
            res = Math.max(dp[i], res);  // 更新最终结果
        }

        // 输出最多能够放置的书的数量
        System.out.println(res);
    }
}